package com.集合.Collections类.模拟斗地主;
/*案例：模拟斗地主升级版
需求：通过程序实现斗地主过程中的洗牌，发牌和看牌。要求：对牌进行排序
思路：
① 创建HashMap，键是编号，值是牌
② 创建ArrayList，存储编号
③ 创建花色数组和点数数组
④从0开始往HashMap里面存储编号，并存储对应的牌。同时往ArrayList里面存储编号
⑤ 洗牌(洗的是编号)，用Collections的shuffle0方法实现
⑥ 发牌(发的也是编号，为了保证编号是排序的，创建TreeSet集合接收)
⑦定义方法看牌(遍历TreeSet集合，获取编号，到HashMap集合找对应的牌)
⑧ 调用看牌方法*/

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;

public class UpdatePokerDemo {
    public static void main(String[] args) {
        HashMap<Integer, String> hm = new HashMap<>();
        ArrayList<Integer> array = new ArrayList<>();
        String[] colors = {"♦", "♣", "♥", "♠"};
        String[] numbers = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};

        //从0开始往HashMap里面存储编号，并存储对应的牌，同时往ArrayList里面存储编号
        int temp = 0;
        for (String c : colors) {
            for (String n : numbers) {
                hm.put(temp, c + n);
                array.add(temp++);
            }
        }
        hm.put(temp, "小王");
        array.add(temp++);
        hm.put(temp, "小王");
        array.add(temp);

//        System.out.println(hm);
//        System.out.println(array);

//        洗牌(洗的是编号)，用Collections的shuffle方法实现
        Collections.shuffle(array);
//        发牌(发的也是编号，为了保证编号是排序的，创建TreeSet集合接收)
        TreeSet<Integer> firstTS = new TreeSet<>();
        TreeSet<Integer> secondTS = new TreeSet<>();
        TreeSet<Integer> thirdTS = new TreeSet<>();
        TreeSet<Integer> dpTS = new TreeSet<>();

        for(int i = 0;i<array.size();i++){
            int poker = array.get(i);
            if(i>=array.size()-3){
                dpTS.add(poker);
            }else if(i%3==0){
                firstTS.add(i);
            }else if(i%3==1){
                secondTS.add(i);
            }else if(i%3==2){
                thirdTS.add(i);
            }
        }

        //调用方法
        lookPoker("张三",firstTS,hm);
        lookPoker("李四",secondTS,hm);
        lookPoker("汤姆",thirdTS,hm);
        lookPoker("底牌",dpTS,hm);


    }
//    定义方法看牌(遍历TreeSet集合，获取编号，到HashMap集合找对应的牌)
    public static void lookPoker(String name,TreeSet<Integer> ts,HashMap<Integer,String> hm){
        System.out.print(name+"的牌是：");
        for(int id:ts){
            String poker = hm.get(id);
            System.out.print(poker+" ");
        }
        System.out.println();
    }
}
